package com.cloudbroker.bcs.platform.ltb.configure.define.parser.formfield;

import com.cloudbroker.bcs.platform.ltb.configure.define.element.*;
import com.cloudbroker.bcs.platform.ltb.configure.define.parser.AbstractHTMLFragmentParser;
import com.cloudbroker.bcs.platform.ltb.configure.define.parser.ConfigureParser;
import org.dom4j.Element;

public abstract class BaseFormFieldParser<G extends FormField<?, ?>> extends AbstractHTMLFragmentParser<G>
        implements FormFieldParser<G> {
    
    public BaseFormFieldParser(ConfigureParser configureParser) {
        super(configureParser);
    }
    
    protected G parseBasicInfoAndDealDefine(Element element, G oriFormField, HTMLFragment<?, ?> contextFragment) {
        G parsedFormFiled = parseForAbstractHTMLFragment(oriFormField, element);
        if (contextFragment instanceof Group || contextFragment instanceof Config) {
            parsedFormFiled.setDefine(true);
        } else if (contextFragment instanceof Property) {
            // 如果上面的解析中发生了ref，
            // 因为被引用元素如果在group或config中，可能是默认define，
            // 所以如果此处引用的元素上没有定义define，默认设置为非define
            if (parsedFormFiled != oriFormField) {
                String define = element.attributeValue("define");
                if (null == define) {
                    parsedFormFiled.setDefine(false);
                }
            }
        }
        return parsedFormFiled;
    }
    
}
